import ctypes


# 参考点
class SFormationTaskInfo(ctypes.Structure):
    _fields_ = [
        ("referX", ctypes.c_double),  # 参考点X
        ("referY", ctypes.c_double),  # 参考点Y
        ("referR", ctypes.c_double),  # 参考点半径
        ("referSpeedMin", ctypes.c_double),  # 参考速度最小值
        ("referSpeedMax", ctypes.c_double),  # 参考速度最大值
        ("referYaw", ctypes.c_double),  # 参考航向  与正北航向顺时针递增，范围[0，360]
    ]


# 参考艇信息
class referUSVInfo(ctypes.Structure):
    _fields_ = [
        ("type", ctypes.c_int),  # 类型
        ("USVID", ctypes.c_int),  # 无人艇编号     000标识不约束
        ("relatDis", ctypes.c_double),  # 相对距离       WRT相对参考WRT的距离，单位米
        (
            "relatYaw",
            ctypes.c_double,
        ),  # 相对角度       WRT相对参考WRT的角度，单位度（以参考艇为圆心，正北顺时针旋转的角度）
    ]


# 输出数据
class USVOutPutStructType(ctypes.Structure):
    _fields_ = [
        ("dbCurX", ctypes.c_double),  # 实时的X坐标(米)
        ("dbCurY", ctypes.c_double),  # 实时的Y坐标(米)
        ("fCurVel", ctypes.c_float),  # 实时的速度(米/秒),
        ("fCurYaw", ctypes.c_float),  # 实时的航向(度))
        ("iUSVId", ctypes.c_int),  # 无人艇ID
    ]


# 障碍物
class InputOBSStruct(ctypes.Structure):
    _fields_ = [
        ("dOBSX", ctypes.c_double),  # x坐标
        ("dOBSY", ctypes.c_double),  # y坐标
        ("obsR", ctypes.c_double),  # 障碍物半径
        ("fOBSV", ctypes.c_float),  # 速度(米/秒) 0~20 m/s
        ("fOBSYaw", ctypes.c_float),  # 航向(度)
        ("obsAtt", ctypes.c_int),  # 障碍物属性，1-已知障碍，2-探测障碍
    ]


# 无人艇
class USVInitStructType(ctypes.Structure):
    _fields_ = [
        ("dbInitX", ctypes.c_double),  # 初始经度(度)
        ("dbInitY", ctypes.c_double),  # 初始纬度(度)
        ("fInitVel", ctypes.c_float),  # 初始速度(米/秒) 0~20 m/s
        ("fInitYaw", ctypes.c_float),  # 初始航向(度)
        ("iUSVType", ctypes.c_int),  # 无人艇类型，0-3T，1-7T，2-20T
        ("iUSVId", ctypes.c_int),  # 无人艇ID
    ]
